﻿#include <iostream>
using namespace std;
//
//struct Stack
//{
//	int n;
//};
//
//void StackInit(struct Stack* st)
//{
//
//}
//void StackPush(struct Stack* st, int a)//函数重载
//{
//
//}
//
//void StackPush(struct Stack* st, double b)//函数重载
//{
//
//}
//
////int Func();
////double Func();只有返回值不同会冲突
//int main()
//{
//	struct Stack st;
//	StackInit(&st);
//	StackPush(&st, 2);
//	StackPush(&st, 2.2);
//	return 0;
//}

//
//void swap(int* &a, int* &b)//可以交换地址
//{
//	int* tmp = a;
//	a = b;
//	b = tmp;
//}
//int main()
//{
//	//int a = 10;
//	//int& b = a;
//	//int& c = b;
//	//cout << &a << endl;
//	//cout << &b << endl;
//	//cout << &c << endl;
//	//b++;
//	//c++;
//	//cout << b << endl;
//	//cout << c << endl;
//	int m = 4;
//	int n = 5;
//	cout << m << " " << n << endl;
//	int* pm = &m;
//	int* pn = &n;
//	cout << pm << endl;
//	cout << pn << endl;
//	swap(pm, pn);
//	cout << pm << endl;
//	cout << pn << endl;
//	return 0;
//}
//
//int Count1()
//{
//	static int n = 0;
//	n++;
//	return n;
//}
//
//int& Count2()
//{
//	static int m = 0;
//	m++;
//	return m;
//}
//int main()
//{
//	int ret = Count2();//传值返回
//	return 0;
//}

#include <assert.h>
//struct seqList
//{
//	int a[100];
//	int size;
//};
//
//int& SLAt(seqList& st, int pos)
//{
//	assert(pos < 100 && pos >= 0);
//	return st.a[pos];
//}
//int main()
//{
//	seqList st;
//	SLAt(st, 0) = 1;//读写(修改)返回值
//	cout << st.a[0] << endl;
//	SLAt(st, 0) += 5;
//	cout << st.a[0] << endl;
//	return 0;
//}

//struct seqList//cpp使用类来解决函数问题,这才是cpp的玩法
//{
//	int a[100];
//	int size;
//	int& at(int pos)
//	{
//		assert(pos < 100 && pos >= 0);
//		return a[pos];
//	}
//};
//
//int main()
//{
//	seqList st;
//	st.at(0) = 0;
//	st.at(0)++;
//	cout << st.at(0) << endl;
//	return 0;
//}

//常引用

//int main()
//{
//	const int a = 0;
//	//int& b = a;
//	//权限不能放大
//	int c = a;
//	//拷贝可以,c的改变不会影响a，没有放大权限
//
//	int x = 0;
//	const int& y = x;
//	//引用过程中权限可以平移或者缩小
//	x++;
//	//引用的缩小权限缩小的是y的权限，而不是x的权限
//
//	const int& z = 10;//给常量取别名
//
//	double ii = 1.11;
//	int dd = ii;//隐式类型转换,会产生临时变量
//	//int& rdd = ii;
//	const int& rdd = ii;
//	return 0;
//}


//int func1()
//{
//	static int x = 0;
//	return x;
//
//}
//
//int& func2()
//{
//	static int x = 0;
//	return x;
//
//}
//int main()
//{
//	int ret = func1();
//	//int& ret1 = func1();//权限放大
//	const int& ret1 = func1();//权限平移
//
//	int& ret2 = func2();//权限平移
//	const int& ret3 = func2();//返回别名，没有产生临时变量，权限缩小
//}

//int main()
//{
//	int a = 0;
//	int b = a;
//	auto c = a;//根据右边的表达式，自动推导c的类型
//	auto d = 1 + 1.11;
//	cout << typeid(d).name() << endl;
//	return 0;
//}

//int main()
//{
//	int arr[] = { 1,2,3,4,5 };
//	//范围for，依次取数组元素赋值给e，并自动迭代和判断结束
//	//适用于任何数组
//	for (auto e : arr)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//	for (auto& e : arr)
//	{
//		e *= 2;
//	}
//	for (auto e : arr)
//	{
//		cout << e << " ";
//	}
//	return 0;
//}

//#define Add(x,y) (((x)+(y))*10)
//宏函数：不需要建立栈帧，提高调用效率
//但是宏函数复杂，易出错，可读性差，不可以调试

inline int Add(int x, int y)//内联函数
{
	return x + y;
}
int main()
{

	return 0;
}